home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / cprog.EXE / C-DERSI2.C < prev    next >
C/C++ Source or Header  |  1996-06-25  |  10KB  |  235 lines

  1.  
  2.                             Lesson One.
  3.  
  4. Some Historical Background.
  5.  
  6. The 'C' programming language was designed and developed by Brian Kernighan, and
  7. Dennis Ritchie at The Bell Research Labs. 'C' is a Language specifically
  8. created
  9. in order to allow the programmer access to almost all of the machine's
  10. internals
  11. - registers, I/O slots and absolute addresses. However, at the same time,
  12. 'C' allows for as much data hiding and programme text modularisation as is
  13. needed to allow very complex multi-programmer projects to be constructed in an
  14. organised and timely fashion. During the early 1960s computer Operating Systems
  15. started to become very much more complex with the introduction of
  16. multi-terminal
  17. and multi-process capabilities. Prior to this time Operating Systems had been
  18. carefully and laboriously crafted using assembler codes, and many programming
  19. teams realised that in order to have a working o/s in anything like a
  20. reasonable time this was now longer economically feasible. This then was the
  21. motivation to produce the 'C' Language, which was first implemented in
  22. assembler on a Digital Equipment Corporation PDP-7. Of course once a simple
  23. assembler version was working it was possible to rewrite the compiler in 'C'
  24. itself. This was done in short order and therefore as soon as the PDP-11 was
  25. introduced by DEC it was only necessary to change the code generator section
  26. of the compiler and the new machine had a compiler in just a few weeks. 'C' was
  27. then used to implement the UNIX o/s. This means, that a complete UNIX can be
  28. transported, or to use the simple jargon of today; 'ported to a new machine in
  29. literally just a few months by a small team of competent programmers.
  30.  
  31. Enough of the past. Lets see the various actions, or compilation phases through
  32. which the `C' compilation system has to go in order that your file of `C'
  33. program text can be converted working program.
  34.  
  35. Assuming that you are able to work an editor and can enter a script and create
  36. a file. Please enter the following tiny program.
  37.  
  38. #ident "@(#) Hello World - my first program"
  39.  
  40. #include <stdio.h>
  41.  
  42. char *format = "%s",
  43.      *hello = "Hello World...\n";
  44.  
  45. main()
  46. {
  47.   printf ( format, hello );
  48.   }
  49.  
  50. Now save it in a file called hello.c. Lower case is allowed - encouraged, no
  51. less - under the UNIX operating system.
  52.  
  53. Now type:
  54.  
  55. cc -o hello hello.c
  56.  
  57. The computer will apparently pause for a few moments and then the
  58. Shell, or Command Line Interpreter prompt will re-appear.
  59.  
  60. Now type:
  61.  
  62. hello
  63.  
  64. Lo and behold the computer will print
  65.  
  66. Hello World...
  67.  
  68. Let's just look at what the computer did during the little pause.
  69.  
  70. The first action is to activate a preliminary process called the pre-processor.
  71. In the case of hello.c all it does is to replace the line
  72.  
  73. #include <stdio.h>
  74.  
  75. with the file stdio.h from the include files library. The file stdio.h provides
  76. us with a convenient way of telling the compiler that all the i/o functions
  77. exist. There are a few other little things in stdio.h but they need not
  78. concern us at this stage.
  79.  
  80. In order to see what the pre-processor actually outputs, you might like to
  81. issue the command:
  82.  
  83. cc -P hello.c
  84.  
  85. The 'cc' command will activate the 'C' compilation system and the -P option
  86. will stop the compilation process after the pre-processing stage, and another
  87. file will have appeared in your directory. Have a look, find hello.i and use
  88. the editor in view mode to have a look at it. So issue the command:
  89.  
  90. view hello.i
  91.  
  92. You will see that a number of lines of text have been added at the front of the
  93. hello.c program. What's all this stuff? Well, have a look in the file called
  94. /usr/include/stdio.h again using the view command.
  95.  
  96. view /usr/include/stdio.h
  97.  
  98. Look familiar?
  99.  
  100. Now the next stage of getting from your program text to an executing program is
  101. the compilation of your text into an assembler code program. After all that is
  102. what a compiler is for - to turn a high level language script into a program.
  103. Lets see what happens by issuing the command
  104.  
  105. cc -S hello.c
  106.  
  107. Once again there is another file in your directory - this time with a .s
  108. suffix.
  109.  
  110. Lets have a look at it in the same way as the .i file
  111.  
  112. view hello.s
  113.  
  114. You will doubtless notice a few recognizable symbols and what appears to be a
  115. pile of gibberish. The gibberish is in fact the nmemonics for the machine
  116. instructions which are going to make the computer do what you have programmed
  117. it to do.
  118.  
  119. Now this assembler code has to be turned into machine instructions.
  120. To do this issue the command.
  121.  
  122. cc -g -c hello.s
  123.  
  124. Now, yet again there is another file in your directory - this time the suffix
  125. is ".o". This file is called the object file. It contains the machine
  126. instructions corresponding exactly to the nmemonic codes in the .s file.
  127. If you wish you can look at these machine codes using one of the commands
  128. available to examine object files.
  129.  
  130. dis -L -t .data hello.o >hello.dis
  131.  
  132. The output from these commands won't be very meaningful to you at this stage,
  133. the purpose of asking you to use them is merely to register in your mind the
  134. fact that an object file is created as a result of the assembly process.
  135.  
  136. The next stage in the compilation process is called by a variety of names -
  137. "loading", "linking", "link editing". What happens is that the machine
  138. instructions in the object file ( .o ) are joined to many more instructions
  139. selected from an enormous collection of functions in a library. This phase of
  140. the compilation process is invoked by the command:-
  141.  
  142. cc -o hello hello.o
  143.  
  144. Now, at last, you have a program to execute! So make it do it's thing by
  145. putting the name of the executable file as a response to the Shell or Command
  146. Line Interpreter prompt.
  147.  
  148. hello
  149.  
  150. Presto, the output from your program appears on the screen.
  151.  
  152. Hello World...
  153.  
  154. You are now allowed to rejoice and have a nice warm fuzzy to hold!
  155. You have successfully entered a `C' program, compiled it, linked it, and
  156. finally, executed it!
  157.  
  158. Having gone through all the various stages of editing, pre-processing,
  159. compiling, assembling, linking, and finally executing, by hand as it were, you
  160. can now rest assured that all the stages are automated by the 'cc' command, and
  161. you can forget how to invoke them! Just remember that the computer has to do
  162. them in order for you to have a program to execute.
  163.  
  164. The single command you use to activate the C Compiler is:
  165.  
  166. cc -o hello hello.c
  167.  
  168. The word after the -o option is the name of the executable file, if you don't
  169. provide a name here the compiler dreams up the name "a.out". The source file
  170. MUST have the .c extension otherwise the compiler complains and stops working.
  171.  
  172. Notes:
  173.  
  174.    The command names used in the above text are those of standard UNIX,
  175.    Your particular system may well use a different name for the 'C' compiler.
  176.    bcc - for Borland 'C'.
  177.    gcc - GNU 'C', which is standard on the Linux operating system.
  178.    lc  - Lattice 'C', available on IBM and clone P.C.s as well as the Amiga.
  179.    Check in the Documentation which came with your compiler.
  180.    The same notions apply to the text editor.
  181.  
  182. Differences between 'C' and other languages.
  183.  
  184. In the years since 'C' was developed it has changed remarkable little.
  185. This fact is a bouquet to the authors, who had the vision and understanding to
  186. create a language which has endured so well. The strengths and weaknesses
  187. should be pointed out here.
  188.  
  189. The big plus is that it is possible to do everything ( well at least 99.9% ) in
  190. 'C' while other languages compel you to write a procedure, subroutine or
  191. function in assembler code.
  192.  
  193. 'C' has very good facilities for creating tables of constant data within the
  194. source file.
  195.  
  196. 'C' doesn't do very much to protect you from yourself. This means that the
  197. resulting code executes faster than most other high level languages, but a much
  198. greater degree of both care and understanding is demanded from the programmer.
  199.  
  200. 'C' is not a closely typed language, although the newer compilers are offering
  201. type checking as part of the language itself as opposed to having to use a
  202. separate program for mechanised debugging.
  203.  
  204. 'C' is a small language with very few intrinsic operations.
  205. All the heavy work is done by explicit library function calls.
  206.  
  207. 'C' allows you to directly and conveniently access most of the internals of
  208. the machine ( the memory, input output slots, and CPU registers ) from the
  209. language without having to resort to assembler code.
  210.  
  211. 'C' compilers have an optimisation phase which can be invoked if desired.
  212. The output code can be optimised for either speed or memory usage. The code
  213. will be just as good as that produced by an assembly code programmer of normal
  214. skill - real guru programmers can do only slightly better.
  215.  
  216. Copyright notice:-
  217.  
  218. (c) 1993 Christopher Sawtell.
  219.  
  220. I assert the right to be known as the author, and owner of the
  221. intellectual property rights of all the files in this material,
  222. except for the quoted examples which have their individual
  223. copyright notices. Permission is granted for onward copying,
  224. but not modification, of this course and its use for personal
  225. study only, provided all the copyright notices are left in the
  226. text and are printed in full on any subsequent paper reproduction.
  227.  
  228. --
  229.  +----------------------------------------------------------------------+
  230.  | NAME   Christopher Sawtell                                           |
  231.  | SMAIL  215 Ollivier's Road, Linwood, Christchurch, 8001. New Zealand.|
  232.  | EMAIL  chris@gerty.equinox.gen.nz                                    |
  233.  | PHONE  +64-3-389-3200   ( gmt +13 - your discretion is requested )   |
  234.  +----------------------------------------------------------------------+
  235.